/*---------------------------------------------------------------------
 * File name: hal_uart.h
 *
 * Copyright (c) <2020-2022>, <ChenLong>
 *
 * All rights reserved.
 *
 * Author: ChenLong
 * Email: worldlong@foxmail.com
 *--------------------------------------------------------------------*/
#pragma once
/*
*/
#include "uart.h"
/*
*/
//uart1 Rx
#define UART1_RX_PIN_0 (GPIO_A|GPIO_PIN_10|GPIO_MODE_AF7|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)
#define UART1_RX_PIN_1 (GPIO_B|GPIO_PIN_7|GPIO_MODE_AF7|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)
#define UART1_RX_PIN_2 (GPIO_C|GPIO_PIN_5|GPIO_MODE_AF7|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)
#define UART1_RX_PIN_3 (GPIO_E|GPIO_PIN_1|GPIO_MODE_AF7|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)
//uart1 Tx
#define UART1_TX_PIN_0 (GPIO_A|GPIO_PIN_9|GPIO_MODE_AF7|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)
#define UART1_TX_PIN_1 (GPIO_B|GPIO_PIN_6|GPIO_MODE_AF7|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)
#define UART1_TX_PIN_2 (GPIO_C|GPIO_PIN_4|GPIO_MODE_AF7|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)
#define UART1_TX_PIN_3 (GPIO_E|GPIO_PIN_0|GPIO_MODE_AF7|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)

//uart2 Rx
#define UART2_RX_PIN_0 (GPIO_A|GPIO_PIN_3|GPIO_MODE_AF7|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)
#define UART2_RX_PIN_1 (GPIO_A|GPIO_PIN_15|GPIO_MODE_AF7|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)
#define UART2_RX_PIN_2 (GPIO_B|GPIO_PIN_4|GPIO_MODE_AF7|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)
#define UART2_RX_PIN_3 (GPIO_D|GPIO_PIN_6|GPIO_MODE_AF7|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)

//uart2 Tx
#define UART2_TX_PIN_0 (GPIO_A|GPIO_PIN_2|GPIO_MODE_AF7|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)
#define UART2_TX_PIN_1 (GPIO_A|GPIO_PIN_14|GPIO_MODE_AF7|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)
#define UART2_TX_PIN_2 (GPIO_B|GPIO_PIN_3|GPIO_MODE_AF7|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)
#define UART2_TX_PIN_3 (GPIO_D|GPIO_PIN_5|GPIO_MODE_AF7|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)


//uart3 Rx
#define UART3_RX_PIN_0 (GPIO_B|GPIO_PIN_11|GPIO_MODE_AF7|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)
#define UART3_RX_PIN_1 (GPIO_C|GPIO_PIN_11|GPIO_MODE_AF7|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)
#define UART3_RX_PIN_2 (GPIO_D|GPIO_PIN_9|GPIO_MODE_AF7|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)

//uart3 Tx
#define UART3_TX_PIN_0 (GPIO_B|GPIO_PIN_10|GPIO_MODE_AF7|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)
#define UART3_TX_PIN_1 (GPIO_C|GPIO_PIN_10|GPIO_MODE_AF7|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)
#define UART3_TX_PIN_2 (GPIO_D|GPIO_PIN_8|GPIO_MODE_AF7|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)


//uart4 Rx
#define UART4_RX_PIN_0 (GPIO_C|GPIO_PIN_11|GPIO_MODE_AF5|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)

//uart4 Tx
#define UART4_TX_PIN_0 (GPIO_C|GPIO_PIN_10|GPIO_MODE_AF5|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)


//uart5 Rx
#define UART5_RX_PIN_0 (GPIO_D|GPIO_PIN_2|GPIO_MODE_AF5|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)
//uart5 Tx
#define UART5_TX_PIN_0 (GPIO_C|GPIO_PIN_12|GPIO_MODE_AF5|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)
/*
*/
class HAL_UART : public hal::UART
{
public:
  HAL_UART() :
    UART()
  {}
  
  bool init(uint32_t cfg0);
  bool config(uint32_t cfg0);  //Just config the param with CFG_MASK
  bool set_baud(uint32_t baud);
  int read(uint8_t *buffer, uint32_t num);
  int write(uint8_t *buffer, uint32_t num);
};



